{
  // let reg = /yideng/g;
  // console.log(reg.test('yideng'));
  // console.log(reg.test('yideng'));
  // console.log(reg.test('yideng'));
  // console.log(reg.test('yideng'));
}

{
  // var length = 10;
  // function fn() {
  //   console.log(this.length);
  // }
  // var yideng = {
  //   length: 5,
  //   method: function (fn) {
  //     fn();
  //     arguments[0]();
  //   },
  // };
  // yideng.method(fn, 1); // 10 2 (注意第二个this指向的是arguments)
  // // window.length 指的是页面的iframe的个数
}

{
  // function test(m) {
  //   m = { v: 20 };
  // }
  // var m = { age: 30 };
  // test(m);
  // console.log(m.v); // undefined
  // // 函数的形参是按值传递的 但是修改形参相当月直接修改地址了
}

{
  // 每日一题  (第8页都是算法，链表相关没看？)
  // react 该看4页 倒着看
  // 工程化 该看2页 倒着看
  // 网络&安全 该5页 倒着看
  // 编程题
  //
  // 性能优化：打包速度，页面加载速度，框架使用层面，网络层面
  // 打包速度：
  // 减少webpack搜索范围 loader添加缓存 开启多核编译 静态资源走cdn(externals)不走打包环节
  // webpack-cache 代码分割splitChunks 抽取公共代码
  // 页面加载速度：路由懒加载 图片懒加载 tree shking 图片格式（雪碧图 webp格式）接口请求合并处理 接口缓存处理减少二次请求
  // 框架使用层面：如react shouldCompnentUpdate PurComponent memo useMemo useCallback
  // 网络层面：http缓存 cdn缓存 http2的多路复用代替http1的长链接
  //
  // list 树 相互转化？？？
  // 输入url发生了什么？此过程可优化的手段？
  //
  // 解构原理？
  // 解构是ES6提供的语法糖，其实内在是针对可迭代对象的Iterator接口，通过遍历器按顺序获取对应的值进行赋值。
  // 原生object对象是默认没有部署Iterator接口，即object不是一个可迭代对象。因为遍历时，不知道到底哪个属性先遍历，哪个属性后遍历，需要开发者手动指定。不过object部署Iterator接口没有必要，因为ES6提供了Map数据结构。实际上对象被解构时，会被当作Map进行解构
}

{
  function debounce(fn, ts) {
    let timer = null;
    return function () {
      if (timer) {
        clearTimeout(timer);
      }

      timer = setTimeout(() => {
        fn.call(this, arguments);
      }, ts);
    };
  }
}
